package estacion.acciones;

import java.util.ArrayList;
import java.util.List;

import Fabricas.FabricaPersona;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import estacion.dominio.Autobus;
import estacion.dominio.Cliente;
import estacion.dominio.Estacion;
import estacion.dominio.Linea;
import estacion.dominio.Persona;
import estacion.dominio.Producto;
import estacion.dominio.Revisor;
import estacion.dominio.Taxi;
import estacion.dominio.Tienda;
import estacion.dominio.Trabajador;
import estacion.dominio.Tramo;
import estacion.dominio.Tren;
import estacion.dominio.Vehiculo;
import estacion.dominio.Vendedor;
import estacion.dominio.Conductor;

public class Modificar extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private static final String VENDEDOR = "vendedor";
	private static final String CONDUCTOR = "conductor";
	private static final String REVISOR = "revisor";
	private static final String CLIENTE = "cliente";
	String username, password,email,password2, password3;
	long num_cuenta=0;
	private boolean cantidad=false;
	Persona persona;
	private int operacion;

	private Producto p=new Producto();
	private Estacion e=new Estacion();
	
	
	@Override
	public String execute() throws Exception {
		FabricaPersona f;   	  
		
		this.persona=(Persona) ActionContext.getContext().getSession().get("persona");
		username=persona.getDNI();
		password=persona.getContrasena();
		
		if(persona!=null){ 
			if(this.operacion==Constantes.FIN){
				Tren tr=new Tren();
				tr=(Tren) tr.consultarVehiculo(((Conductor) persona).getTipo_vehiculo());
				int cantidad=tr.get_capacidadPersonas();
				Producto pr=new Producto();
				pr.setCodigo_linea(tr.getLinea().getCodigo_linea());
				pr.setCantidad_producto(cantidad);
				pr.actualizarBillete();
			
			}else if(this.operacion==Constantes.COMPRAR){
				 ((Conductor) persona).venderBilleteT((Conductor)persona);	
				 cantidad=true;
			}else{
				ModificarInfo();
	    		if(!this.getPassword3().equals("")){
	    			if(this.getPassword2().equals(password)){
	    			    persona.setContrasena(this.getPassword3());
	    			    ActionContext.getContext().getSession().put("persona", this.persona);
	    			}else{
	    				 this.addActionError("Error de contrasenas");
	    		         return ERROR;
	    			}
	    		}
	    		persona.modificarPersona();
			}
    		if(this.persona.getRol().equals("Vendedor")) return VENDEDOR;
    		else if(this.persona.getRol().equals("Conductor")) return CONDUCTOR;
    		else if(this.persona.getRol().equals("Revisor")) return REVISOR;
    		else if(this.persona.getRol().equals("Cliente")) return CLIENTE;
    		else return ERROR;	
    	} else {
            this.addActionError("Error..!");
            return ERROR;
        }
    }

	private void ModificarInfo() {
		if(!this.getEmail().equals("")){
			persona.setEmail(this.getEmail());
		}
		if(this.getNum_cuenta()!=0){
			persona.setNum_cuenta_corriente(this.getNum_cuenta());
		}			
		
	}
	
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public long getNum_cuenta() {
		return num_cuenta;
	}

	public void setNum_cuenta(long num_cuenta) {
		this.num_cuenta = num_cuenta;
	}

	public String getPassword2() {
		return password2;
	}

	public void setPassword2(String password2) {
		this.password2 = password2;
	}

	public String getPassword3() {
		return password3;
	}

	public void setPassword3(String password3) {
		this.password3 = password3;
	}
	
	public String getUsername() {
		return username;
	}
	
	public Persona getPersona(){
		return  this.persona;
	}
	
	public void setOperacion(String operacion) {
		if (operacion.equalsIgnoreCase("Realizar venta"))
			this.operacion = Constantes.COMPRAR;
		else if(operacion.equalsIgnoreCase("Fin trayecto"))
			this.operacion = Constantes.FIN;
	}

	
	public Tienda getTienda() throws Exception{
    	Tienda tien=new Tienda();
    	tien=tien.consultTiendaporCodigo(((Vendedor) persona).gettienda().getCodigo_Tienda());
		return tien;	
    }
    
    public Vehiculo getVehiculo() throws Exception{
		Taxi taxi=new Taxi();
		Autobus bus=new Autobus();
		Tren tren=new Tren();
		taxi=(Taxi) taxi.consultarVehiculo(((Conductor) persona).getTipo_vehiculo());
		bus=(Autobus) bus.consultarVehiculo(((Conductor) persona).getTipo_vehiculo());
		tren=(Tren) tren.consultarVehiculo(((Conductor) persona).getTipo_vehiculo());
		if(taxi!=null) return taxi;
		else if(bus!=null)return bus;
		else return tren;
	}
	public List<Producto> getListaJuguetes() throws Exception {
		return p.getProductos(1);
	}

	public List<Producto> getListaSouvenires() throws Exception {
		return p.getProductos(2);
	}

	public List<Producto> getListaComida() throws Exception {
		return p.getProductos(3);
	}

	public List<Producto> getLista() throws Exception {
		return p.getProductos(((Vendedor)((Trabajador)this.persona)).gettienda().getCodigo_Tienda());
	}

	public List<Estacion> getEstaciones() throws Exception {
		return e.getEstaciones();
	}
	
	public boolean isCantidad() {
		return cantidad;
	}

	public void setCantidad(boolean cantidad) {
		this.cantidad = cantidad;
	}
	public List<Estacion> getEstacionesOrigen() throws Exception {
		if(this.persona.getRol().equals("Revisor")){
			Vehiculo v=new Tren();
			String tipo_vehiculo=((Revisor)((Trabajador)this.persona)).getTipo_vehiculo();
			int cod_linea=((Tren)(v.consultarVehiculo(tipo_vehiculo))).getLinea().getCodigo_linea();
			return e.getEstacionesOrigen(cod_linea);
		}else{
			Vehiculo v=new Autobus();
			String tipo_vehiculo=((Conductor)((Trabajador)this.persona)).getTipo_vehiculo();
			int cod_linea=((Autobus)(v.consultarVehiculo(tipo_vehiculo))).getLinea().getCodigo_linea();
			return e.getEstacionesOrigen(cod_linea);
		}
	}
	public List<Estacion> getEstacionesDestino() throws Exception {
		if(this.persona.getRol().equals("Revisor")){
			Vehiculo v=new Tren();
			String tipo_vehiculo=((Revisor)((Trabajador)this.persona)).getTipo_vehiculo();
			int cod_linea=((Tren)(v.consultarVehiculo(tipo_vehiculo))).getLinea().getCodigo_linea();
			return e.getEstacionesDestino(cod_linea);
		}else{
			Vehiculo v=new Autobus();
			String tipo_vehiculo=((Conductor)((Trabajador)this.persona)).getTipo_vehiculo();
			int cod_linea=((Autobus)(v.consultarVehiculo(tipo_vehiculo))).getLinea().getCodigo_linea();
			return e.getEstacionesDestino(cod_linea);
		}
	}
	public Vendedor getVendedor(){
		   return (Vendedor) persona;
	    }

}
